// 此文件作为generator的核心入口
//需要导出一个继承自Yeoman Generator的类型
//Yeoman Generator 在工作时会自动调用我们在此类型中定义的一些生命周期方法
//我们在这些方法中可以通过调用父类提供的一些工具方法实现一些功能，例如文件写入

const Generator = require('yeoman-generator')

module.exports = class extends Generator {
    // 动态数据接收
    prompting() {
            // Yeoman 在询问用户环节会自动调用此方法
            // 在此方法中可以调用父类的prompt()方法发出UI用户的命令询问
            // 可以更好的异步控制。采用用户输入的方式提交户用数据
            return this.prompt([{
                    type: 'input',
                    name: "name",
                    message: "Your project name",
                    default: this.appname //appname 为项目生成目录名称
                }])
                .then(answers => {
                    // 当前用户输入的结果，会以一个对象形式返回{key:value}
                    // answers = {name:'user input value'}
                    this.answers = answers
                })
        }
        // 文件导出
    writing() {
        // 1.自动生成文件方式
        // yeoman 自动生成文件阶段调用此方法
        // 我们这里尝试往项目目录中写入文件
        // generator fs：生成过期的内部封装fs,this.fs.write(文件路径，文件生成的内容)
        // this.fs.write(
        //     this.destinationPath('temp.txt'),
        //     Math.random().toString()
        // )

        // 2.自动生成项目模板方式
        // 通过模板方式写入文件到目标目录
        // tmp 映射templates的foo.txt源文件，
        // const tmp = this.templatePath('foo.txt')
        //     // output_tmp映射导出的源文件
        // const ouput_tmp = this.destinationPath('foo.txt')
        //     //output_context :映射导出文件foo.txt的参量赋值
        // const output_context = { title: 'Hello foo', success: true }
        //     // 调用generator的fs模板文件导出api，实现文件导出
        // this.fs.copyTpl(tmp, ouput_tmp, output_context)


        const tmp = this.templatePath('bar.html')
            // output_tmp映射导出的源文件
        const ouput_tmp = this.destinationPath('bar.html')
            //output_context :映射导出文件foo.txt的参量赋值
        const output_context = this.answers
            // 调用generator的fs模板文件导出api，实现文件导出
        this.fs.copyTpl(tmp, ouput_tmp, output_context)
    }
}